package com.neuedu.hisboot.controller;

import com.neuedu.hisboot.dto.Result;
import com.neuedu.hisboot.entity.TemplateInfo;
import com.neuedu.hisboot.service.ITemplateInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 病历模板信息管理控制器
 * </p>
 *
 * @author jaun
 * @since 2025-07-04
 */
@RestController
@RequestMapping("/templateinfo")
public class TemplateInfoController {

    @Autowired
    private ITemplateInfoService templateInfoService;

    /**
     * 获取所有模板信息
     */
    @GetMapping("/list")
    public Result<List<TemplateInfo>> getTemplateInfos() {
        List<TemplateInfo> templates = templateInfoService.list();
        return Result.success(templates);
    }

    /**
     * 根据ID获取模板信息
     */
    @GetMapping("/{id}")
    public Result<TemplateInfo> getTemplateInfoById(@PathVariable("id") Integer id) {
        TemplateInfo template = templateInfoService.getById(id);
        if (template == null) {
            return Result.error(500, "未找到对应的模板信息");
        }
        return Result.success(template);
    }

    /**
     * 根据模板号获取模板信息
     */
    @GetMapping("/number/{templateNumber}")
    public Result<TemplateInfo> getTemplateInfoByNumber(@PathVariable("templateNumber") String templateNumber) {
        TemplateInfo template = templateInfoService.getByTemplateNumber(templateNumber);
        if (template == null) {
            return Result.error(500, "未找到对应的模板信息");
        }
        return Result.success(template);
    }

    /**
     * 根据医生ID获取模板信息列表
     */
    @GetMapping("/doctor/{doctorId}")
    public Result<List<TemplateInfo>> getTemplateInfosByDoctor(@PathVariable("doctorId") Integer doctorId) {
        List<TemplateInfo> templates = templateInfoService.getByDoctorId(doctorId);
        return Result.success(templates);
    }

    /**
     * 创建新的模板信息
     */
    @PostMapping("/create")
    public Result<TemplateInfo> createTemplateInfo(@RequestBody TemplateInfo templateInfo) {
        try {
            if (templateInfo.getDelMark() == null) {
                templateInfo.setDelMark(1);
            }
            boolean success = templateInfoService.save(templateInfo);
            if (success) {
                return Result.success(templateInfo);
            } else {
                return Result.error(500, "创建模板信息失败");
            }
        } catch (Exception e) {
            return Result.error(500, "创建模板信息时发生错误: " + e.getMessage());
        }
    }

    /**
     * 更新模板信息
     */
    @PutMapping("/update")
    public Result<TemplateInfo> updateTemplateInfo(@RequestBody TemplateInfo templateInfo) {
        try {
            boolean success = templateInfoService.updateById(templateInfo);
            if (success) {
                return Result.success(templateInfo);
            } else {
                return Result.error(500, "更新模板信息失败");
            }
        } catch (Exception e) {
            return Result.error(500, "更新模板信息时发生错误: " + e.getMessage());
        }
    }

    /**
     * 删除模板信息（逻辑删除）
     */
    @DeleteMapping("/{id}")
    public Result<String> deleteTemplateInfo(@PathVariable("id") Integer id) {
        try {
            TemplateInfo template = templateInfoService.getById(id);
            if (template == null) {
                return Result.error(500, "未找到对应的模板信息");
            }
            
            // 逻辑删除
            template.setDelMark(0);
            boolean success = templateInfoService.updateById(template);
            if (success) {
                return Result.success("删除成功");
            } else {
                return Result.error(500, "删除模板信息失败");
            }
        } catch (Exception e) {
            return Result.error(500, "删除模板信息时发生错误: " + e.getMessage());
        }
    }

    /**
     * 导入模板
     */
    @PostMapping("/import")
    public Result<String> importTemplate(@RequestBody TemplateInfo templateInfo) {
        try {
            boolean success = templateInfoService.save(templateInfo);
            if (success) {
                return Result.success("导入模板成功");
            } else {
                return Result.error(500, "导入模板失败");
            }
        } catch (Exception e) {
            return Result.error(500, "导入模板时发生错误: " + e.getMessage());
        }
    }

    /**
     * 导出模板
     */
    @GetMapping("/export/{id}")
    public Result<TemplateInfo> exportTemplate(@PathVariable("id") Integer id) {
        TemplateInfo template = templateInfoService.getById(id);
        if (template == null) {
            return Result.error(500, "未找到对应的模板信息");
        }
        return Result.success(template);
    }

    /**
     * 根据主诉搜索模板
     */
    @GetMapping("/search/chiefComplaint/{chiefComplaint}")
    public Result<List<TemplateInfo>> searchByChiefComplaint(@PathVariable("chiefComplaint") String chiefComplaint) {
        List<TemplateInfo> templates = templateInfoService.searchByChiefComplaint(chiefComplaint);
        return Result.success(templates);
    }

    /**
     * 根据初步诊断搜索模板
     */
    @GetMapping("/search/diagnosis/{diagnosis}")
    public Result<List<TemplateInfo>> searchByDiagnosis(@PathVariable("diagnosis") String diagnosis) {
        List<TemplateInfo> templates = templateInfoService.searchByDiagnosis(diagnosis);
        return Result.success(templates);
    }
}

